const webpack = require('webpack');
const path = require('path');
const glob = require('glob');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
module.exports = {
    mode: 'development', // {1}
    // devtool: 'none', // 关闭source map 配置
    entry: { // {2}
        main: './src/index.js'
    },
    output: { // {3}
        publicPath: "", // 所有dist文件添加统一的前缀地址，例如发布到cdn的域名就在这里统一添加
        filename: 'bundle.js',
        path: path.resolve(__dirname, 'dist')
    },
    module: {
        rules: [
            {
                test: /\.(png|svg|jpg|gif)$/,
                use: {
                    loader: 'url-loader',
                    options: {
                        name: '[name]_[hash].[ext]',
                        outputPath: "images", // 打包该资源到 images 文件夹下
                        limit: 2048 // 如果图片的大小，小于2048KB则时输出base64，否则输出图片
                    }
                }
            },
            {
                test: [/\.css/],
                include: path.resolve(__dirname, 'src'),
                use: [
                    'style-loader',
                    'css-loader'
                ]
            },
            {
                test: /\.less$/,
                use: [
                    { loader: MiniCssExtractPlugin.loader },
                    { loader: 'css-loader' },
                    // { loader: 'postcss-loader' }, // 自动添加浏览器的前缀
                    { loader: 'less-loader' }
                ]
            },
            {
                test: /\.js$/, // 正则匹配js文件
                exclude: /node_modules/, // 排除 node_modules 文件夹
                loader: "babel-loader", // 使用 babel-loader
            }
        ]
    },
    plugins: [
        new MiniCssExtractPlugin({ // 单独得less文件抽离成单独css文件
            filename: 'static/css/[name].[contenthash:8].css',  
            chunkFilename: 'static/css/[name].[contenthash:8].chunk.css'
          }),
        new HtmlWebpackPlugin({
            template: 'src/index.html' // 使用模板文件
        }),
        new CleanWebpackPlugin() // 使用这个插件在每次生成dist目录前，先删除dist目录
    ],
    devServer: {
        contentBase: './dist', // 服务器启动根目录设置为dist
        open: true, // 自动打开浏览器
        port: 8081, // 配置服务启动端口，默认是8080
        // plugins:[
        //     new webpack.HotModuleReplacementPlugin() // 增加热更新插件
        // ]
    }
}